package org.atlantis.grosbeak.depot;

import org.atlantis.grosbeak.depot.proxy.ObjectProxy;

/**
 * 容器的环境。
 * 
 * @author <a href="mailto:seenoevil.cn@gmail.com">SeeNoEvil</a>
 * 
 */
public interface DepotEnv {

	/**
	 * 保存一个对象到指定环境（范围环境）的容器中。
	 * 
	 * @param scope
	 *            对象存在的环境（范围环境）。
	 * @param id
	 *            对象的ID。
	 * @param op
	 *            需要储存的对象代理。
	 * @return 如果保存成功则返回true、否则返回false。
	 */
	boolean save(String scope, String id, ObjectProxy op);

	/**
	 * 从指定的环境（返回环境）中根据对象的ID移除一个对象。
	 * 
	 * @param scope
	 *            对象存在的环境（范围环境）。
	 * @param id
	 *            需要移除的对象的ID.
	 * @return 如果移除成功则返回true、否则返回false。
	 */
	boolean remove(String scope, String id);

	/**
	 * 从容器中获取一个对象的代理。
	 * 
	 * @param id
	 *            对象的ID。
	 * @return 获取到的对象的代理。
	 */
	ObjectProxy obtain(String id);

	/**
	 * 重置容器环境，把容器环境恢复成刚创建的状态。
	 */
	void clear();

	/**
	 * 销毁容器环境，销毁后的容器环境是不可再使用的。
	 */
	void destory();
}
